Page({
  data: {
    // 自选股数据
    stocks: [],
    isLogin: false, // 是否已登录
    isLoading: true // 是否正在加载
  },

  onLoad: function () {
    // 获取应用实例
    const app = getApp();

    // 检查登录状态
    if (app.globalData.isLogin) {
      this.setData({
        isLogin: true
      });
      // 加载自选股数据
      this.loadFavoriteStocks();
    } else {
      // 如果全局数据还没有准备好，设置回调
      app.loginStatusCallback = isLogin => {
        this.setData({
          isLogin: isLogin
        });
        if (isLogin) {
          this.loadFavoriteStocks();
        } else {
          this.setData({
            isLoading: false
          });
        }
      };
      this.setData({
        isLoading: false
      });
    }
  },

  onShow: function () {
    // 每次显示页面时都重新加载自选股数据
    const app = getApp();

    // 更新登录状态
    this.setData({
      isLogin: app.globalData.isLogin
    });

    // 如果已登录，无论如何都重新加载自选股数据
    if (app.globalData.isLogin) {
      this.loadFavoriteStocks();
    } else {
      this.setData({
        stocks: [],
        isLoading: false
      });
    }
  },

  // 从云数据库加载自选股
  loadFavoriteStocks: function () {
    const that = this;
    const app = getApp();

    this.setData({
      isLoading: true
    });

    // 查询云数据库
    const db = wx.cloud.database();
    db.collection('selectedStock').where({
      _openid: app.globalData.openid
    }).get({
      success: function (res) {
        if (res.data && res.data.length > 0 && res.data[0].stocks && res.data[0].stocks.length > 0) {
          // 获取自选股代码列表
          const stockCodes = res.data[0].stocks;

          // 构建初始股票数据
          const stocks = stockCodes.map(code => {
            return {
              code: code,
              name: that.getStockNameByCode(code),
              price: '--',
              change: '--',
              changePercent: '--'
            };
          });

          that.setData({
            stocks: stocks,
            isLoading: false
          });

          // 加载股票数据
          that.loadStockData();
        } else {
          that.setData({
            stocks: [],
            isLoading: false
          });
        }
      },
      fail: function (err) {
        console.error('查询自选股失败', err);
        that.setData({
          isLoading: false
        });
      }
    });
  },

  // 根据股票代码获取股票名称的备用方法
  getStockNameByCode: function (code) {
    // 常用股票代码和名称的映射
    const stockMap = {
      'sh600036': '招商银行',
      'sh601006': '大秀铁路',
      'sh601398': '工商银行',
      'sh601288': '农业银行',
      'sh601988': '中国银行',
      'sh601318': '中国平安',
      'sh600519': '贵州茅台',
      'sz000001': '平安银行',
      'sz000002': '万科A',
      'sz000333': '美的集团',
      'sz000651': '格力电器',
      'sz000858': '五粮液'
    };

    return stockMap[code] || code.substring(2); // 如果没有映射，返回股票代码数字部分
  },

  // 加载自选股票数据
  loadStockData: function () {
    const that = this;

    if (this.data.stocks.length === 0) {
      return;
    }

    const stockCodes = this.data.stocks.map(stock => stock.code).join(',');

    wx.request({
      url: `https://hq.sinajs.cn/list=${stockCodes}`,
      header: {
        'content-type': 'text/plain',
        'Referer': 'https://finance.sina.com.cn'
      },
      success(res) {
        that.parseStockData(res.data);
      },
      fail(err) {
        console.error('获取股票数据失败', err);
        wx.showToast({
          title: '获取数据失败',
          icon: 'none'
        });
      }
    });
  },

  // 解析股票数据
  parseStockData: function (data) {
    try {
      const lines = data.split('\n');
      const updatedStocks = [...this.data.stocks];

      lines.forEach((line, index) => {
        if (!line.trim()) return;

        const regex = /=\"(.*)\"\;/;
        const matches = line.match(regex);

        if (matches && matches[1] && index < updatedStocks.length) {
          const elements = matches[1].split(',');
          const stockName = elements[0]; // 股票名称
          const currentPrice = parseFloat(elements[3]);
          const prevClose = parseFloat(elements[2]);
          const changeAmount = (currentPrice - prevClose).toFixed(2);
          const changePercent = ((changeAmount / prevClose) * 100).toFixed(2);

          // 更新股票名称为真实名称
          updatedStocks[index].name = stockName;
          updatedStocks[index].price = currentPrice.toFixed(2);

          // 保存原始涨跌值，不仅仅是字符串
          updatedStocks[index].rawChange = parseFloat(changeAmount);

          // 涨跌颜色判断依据数值而非字符串
          updatedStocks[index].change = changeAmount > 0 ? '+' + changeAmount : changeAmount;
          updatedStocks[index].changePercent = changeAmount > 0 ? '+' + changePercent + '%' : changePercent + '%';
        }
      });

      this.setData({
        stocks: updatedStocks
      });
    } catch (error) {
      console.error('解析股票数据出错', error);
    }
  },

  // 跳转到个股详情页面
  goToStockDetail: function (e) {
    const stock = e.currentTarget.dataset.stock;
    wx.navigateTo({
      url: `/pages/stock/index?code=${stock.code}`
    });
  },

  // 跳转到登录页面
  goToLogin: function () {
    wx.navigateTo({
      url: '/pages/login/index'
    });
  }
})